FHEM – serielle Geräte über WiFi anbinden

Manchmal möchte man vielleicht ein serielles Gerät (device) statt über USB oder RS232 entfernt vom FHEM Server betreiben. Zum Beispiel einen FhemDuino oder SignalDuino oder RFXCOM. Dies ist nun mit einem ESP-01 oder einem anderen ESP Modul basierend auf dem ESP-8266 einfach möglich.

Der ESP-8266 bietet WLAN Anbindung, zwei oder mehr GPIO Ein- und Ausgänge und eine serielle Schnittstelle. Mit Hilfe geeigneter Software kann man einen ESP-8266 als WiFi-Serial Bridge einsetzen. Das heisst, alles was seriell rein oder raus geht wird über WiFi und ein geeignetes Protokol zum oder vom FHEM Server übertragen.

In meinem Beispiel betreibe ich einen Arduino Nano mit der SignalDuino Software und einem ESP-01 mit der JeeLink Software esp-link an meinem FHEM Server.

Die Schaltung besteht im wesentlichen aus

  • einem Spannungsteiler zwischen TX/Nano und RX/ESP-01, damit der 5V Signalausgang zu dem 3V3 Eingang des ESP-01 kompatibel ist
  • einem Spannungsregler, der 3,3V mit mindestens 200mA für den ESP-01 zur Verfügung stellt. Hier Glättungskondensatoren vorsehen. Der ESP zieht sehr wechselhaft zwischen ein paar mA bis zu 200mA und mehr.
  • zwei Tastern, einmal für den Reset des ESP-01 und einmal, um den ESP-01 in den Programmiermodus zu setzen
  • je eine LED an GPIO0 und GPIO2 zur Anzeige des esp-link Status und von serieller Aktivität
  • einem Entstörkondensator von ca 10-100nF direkt an VCC und GND des ESP Moduls

nano-esp8266

Der Reset-Taster sollte unbedingt mit einem parallel geschaltetem Elko entprellt werden. Der Reset-Eingang des ESP-01 wird über einen Widerstand von 3,3k auf high Potential gezogen.

Zur Beschaltung der LED an GPIO2 ist folgendes zu bemerken: Es finden sich einige Schaltungen im Internet, bei denen GPIO2 über einen Vorwiderstand oder sogar ohne einen an die LED und dann gegen Minus geschaltet ist. Diese Schaltungen werden nicht funktionieren, da der ESP-8266 Bootloader in den Flash Modus wechselt, wenn GPIO2 LOW ist. Dies ist aber über die LED gegen Minus gegeben und das im ESP liegende Programm wird nicht starten. Deshalb ist hier die LED über einen Vorwiderstand gegen Plus 3,3V verbunden und über einen Taster gegen Minus. Im Normalfall hat der GPIO Anschluss daher High Pegel.

Wenn man den ESP-8266 flashen möchte, drückt man die Prog-Taste (an GPIO2) und dann die Reset-Taste und lässt die Reset Taste und dann die Prog-Taste los. Anschließend beschickt man den ESP-8266 über das esptool mit den Flash-Daten.

Nachdem man die esp-link Firmware in den ESP-8266 geladen hat, muß man noch die Funk Netzwerkverbindung herstellen. Dazu sucht man am PC die verfügbaren Funknetze und sollte ein ungesichertes Funknetz mit dem Namen ESP_hexhex oder Thinker_hexhex finden. Hexhex sind die letzten Stellen der Mac-Adresse des ESP Moduls.

Wenn die Verbindung hergestellt ist, bekommt der PC eine IP-Adresse von 192.168.4.2. Auf dem PC muss DHCP aktiviert sein. Der ESP selbst hat die IP-Adresse 192.168.4.1. Nun öffnet man im Web Browser seiner Wahl die Webseite unter http://192.168.4.1.

FireShot Capture 1 - esp-link - http___192.168.0.99_home

Auf der Hauptseite legt man die Anschlussbelegung des ESP fest. Im Beispiel ist das: “jn-esp-v2: reset:gpio12 isp:gpio13 conn_led:gpio0 ser_led:gpio2 swap_uart:no”.

Ausserdem sieht man einige Informationen zum Netzwerk.

Nachdem man dann links open auf WiFi klickt, erscheint die WiFi Seite.

FireShot Capture 2 - esp-link - http___192.168.0.99_wifi_wifi

Hier werden die gefundenen WLAN Netzwerke angezeigt und man kann die Verbindung des ESP mit dem eigenen Netzwerk festlegen. Dazu das Netzwerk auswählen, das Passwort bzw. den Verbindungs-Schlüssel eingeben und [Connect] anklicken.

Die esp.link Software wechselt automatisch in den Stationsmodus (STA) und bietet dann keinen WLAN Zuganspunkt mehr an (es sei denn, der ESP kann als STA keine Verbindung zum Netzwerk aufbauen). Nun muss man den PC wieder mit seinem normalen Netzwerk verbinden. Der ESP sollte sich mit dem Netzwerk verbunden haben und ist evetuell über http://esp-link.local erreichbar. Ansonsten muss man die IP-Adresse des ESP über den DHCP Server oder einen IP Netzwerkscan ermitteln. In meinem Beispiel habe ich auf der WiFi Webseite von esp-link eine statische IP Adresse vergeben, da mein DHCP Server dem ESP unterschiedliche IP Adressen zugewiesen hatte.

Auf der uC Consolen Seite kann man die seriellen Daten verfolgen (hier  mit SignalDuino Daten):

FireShot Capture 3 - esp-link - http___192.168.0.99_console

… und dann gibt es noch die Debug Seite von esp-link:

FireShot Capture 4 - esp-link - http___192.168.0.99_log

In FHEM kann man nach efolgreicher Einrichtung von esp-link statt dem seriellen USB Anschluss die IP-Adresse des ESP Moduls und den Port 23 eintragen. Zum Beispiel für ein neues FHEM device:

define sduinoIP SIGNALDuino 192.168.0.99:23

In FHEM erscheint dann zum Beipiel folgendes:

FireShot Capture 5 - Home, Sweet Home - http___atom2_8083_fhem_detail_sduinoIP

Hier noch die komplette Schaltung:

nano-esp8266